import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Date;


public class Main {


	public static void main(String[] args) {
		
		String filename = "test.ser";
		ObjectOutputStream outputStream = null;
		try
		{
			outputStream = new ObjectOutputStream(new FileOutputStream(filename));
		}
		catch (FileNotFoundException ex) 
		{
			ex.printStackTrace();
		} 
		catch (IOException ex) 
		{
			ex.printStackTrace();
		} 
		
		

		ClientAdministration ca = new ClientAdministration();
		Date d1 = new Date(111, 10, 18, 12, 04);
		Date d2 = new Date(111, 11, 20, 12, 04);
		Date d3 = new Date(111, 06, 06, 45, 00);
		Date d4 = new Date(111, 07, 06, 45, 00);
		ArrayList<Passager> pass = new ArrayList<Passager>();
		ArrayList<Transport> trans = new ArrayList<Transport>();

		Trajet trajet = new Trajet(Villes.MARSEILLE, Villes.NEWYORK, d1, d2);
		Trajet trajet0 = new Trajet(Villes.NICE, Villes.NEWYORK, d3, d4);

		ArrayList<Trajet> trajets = new ArrayList<Trajet>();
		trajets.add(trajet);
		trajets.add(trajet0);		
		Transport t = new Transport("boeing183", 20, trajets, Types.AVION);

		Trajet trajet2 = new Trajet(Villes.PARIS, Villes.NEWYORK, d1, d2) ;
		Trajet trajet22 = new Trajet(Villes.MARSEILLE, Villes.NEWYORK, d3, d4) ;
		ArrayList<Trajet> trajets2 = new ArrayList<Trajet>();
		trajets2.add(trajet2);
		trajets2.add(trajet22);
		Transport t2 = new Transport("bateau1", 20, trajets2, Types.BATEAU);


		Trajet trajet3 = new Trajet(Villes.NEWYORK, Villes.NICE, d1, d2) ;
		Trajet trajet33 = new Trajet(Villes.PARIS, Villes.NICE, d3, d4) ;
		ArrayList<Trajet> trajets3 = new ArrayList<Trajet>();
		trajets3.add(trajet3);
		trajets3.add(trajet33);
		Transport t3 = new Transport("bus1", 20, trajets3, Types.BUS);


		Trajet trajet4 = new Trajet(Villes.PARIS, Villes.NEWYORK, d1, d2);
		Trajet trajet44 = new Trajet(Villes.NEWYORK, Villes.NICE, d3, d4);
		ArrayList<Trajet> trajets4 = new ArrayList<Trajet>();
		trajets4.add(trajet4);
		trajets4.add(trajet44);
		Transport t4 = new Transport("avion2", 30, trajets4, Types.AVION);

		trans.add(t);
		trans.add(t2);
		trans.add(t3);
		trans.add(t4);
		

		System.out.println("======================= Lancement du test =======================");

		System.out.println("Ajouts des 	trajets");
		System.out.println("Cr�ations des passagers");

		System.out.println("======================= Ajouts des trajets ======================");
		for(int i = 0; i < 4; i++)
		{
			ca.ajouterTransport(filename,trans.get(i));
		}
		System.out.println("======================= Cr�ations des passagers==================");
		

		for(int i = 0; i < 50; i++)
		{
			pass.add(new Passager("Passager" + i,"Prenom" + i));
		}


		//s.reservationFichier(pass, t, d1);


		//s.consulter();


		ArrayList<Transport> test = new ArrayList<Transport>();
		test.add(t);
		test.add(t2);
		test.add(t3);
		test.add(t4);

		System.out.println("========== Ajouts des passagers aux divers transports ===========");
		
		for(int i = 0; i < t.getCapaciteMax(); i++)
		{
			ca.getServeur().reservationObjet(pass.get(i), t,d3,filename);
		}
		System.out.println("============== Reservation pour Transport 1 termin� =============");
		
		for(int i = 0; i < t2.getCapaciteMax(); i++)
		{
			ca.getServeur().reservationObjet(pass.get(i+t.getCapaciteMax()), t2, d3,filename);
		}
		
		System.out.println("============== Reservation pour Transport 2 termin� =============");

		for(int i =0; i < 10; i++)
		{
			ca.getServeur().reservationObjet(pass.get(i+t.getCapaciteMax()+t2.getCapaciteMax()), t4, d1,filename);
		}
		
		System.out.println("============== Reservation pour Transport 4 termin� =============");
		

		ca.consulter(filename);

		System.out.println("================ Ajout d'un nouveau transport ===================");
		Transport t5 = new Transport("avion5", 30, trajets, Types.AVION);
		
		ca.ajouterTransport(filename, t5);
		
		System.out.println("======================= Ajout termin� ===========================");
		
		ca.consulter(filename);
		
		System.out.println("===================== Recherche des avions ======================");
		
		ca.rechercheType(filename,Types.AVION);
		
		System.out.println("================= Trajets au d�part de PARIS ==================");
		
		ca.rechercheDepart(filename,Villes.PARIS);
		
		System.out.println("=============== Trajets � destination de NICE =================");
		
		ca.rechercheArrive(filename,Villes.NICE);
		
		System.out.println("=============== Trajets de NICE � NEW YORK  =================");
		
		ca.rechercheVilles(filename,Villes.NICE, Villes.NEWYORK);
		
		System.out.println("======= Trajets partant a 21h de NICE � NEW YORK ============");
		
		ca.rechercheDate(filename, d1, Villes.NICE, Villes.NEWYORK);
		
	}
}
